package br.com.locasis.entity;

// Generated 24/05/2012 20:14:44 by Hibernate Tools 3.4.0.CR1

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;
import org.hibernate.validator.Pattern;

import br.com.locasis.utilitarios.UtilString;

/**
 * Automovel generated by hbm2java
 */
@Entity
@Table(name = "automovel")
public class Automovel implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public static final String SITUACAO_ALUGADO = "ALUGADO";
	public static final String SITUACAO_DISPONIVEL = "DISPONIVEL";

	private Integer idAutomovel;
	private String marca;
	private String modelo;
	private String cor;
	private Integer anoFabricacao;
	private Integer anoModelo;
	private String placa;
	private String chassi;
	private String tipo;
	private BigDecimal valorDiaria;
	private BigDecimal valorHora;
	private BigDecimal valorKm;
	private BigDecimal valorCaucao;
	private boolean flgAtivo;
	private String situacao;
	private String combustivel;
	private String nrRenavam;
	private Set<Aluguel> aluguels = new HashSet<Aluguel>(0);
	private Set<ManutencaoVeiculo> manutencaoVeiculos = new HashSet<ManutencaoVeiculo>(0);
	private Set<Agendamento> agendamentos = new HashSet<Agendamento>(0);

	@Transient
	private boolean selecionado;

	public Automovel() {
	}

	public Automovel(Integer idAutomovel, String marca, String modelo, String cor, Integer anoFabricacao, Integer anoModelo, String placa, String chassi, String tipo, BigDecimal valorDiaria, BigDecimal valorHora, BigDecimal valorKm) {
		this.idAutomovel = idAutomovel;
		this.marca = marca;
		this.modelo = modelo;
		this.cor = cor;
		this.anoFabricacao = anoFabricacao;
		this.anoModelo = anoModelo;
		this.placa = placa;
		this.chassi = chassi;
		this.tipo = tipo;
		this.valorDiaria = valorDiaria;
		this.valorHora = valorHora;
		this.valorKm = valorKm;
	}

	public Automovel(Integer idAutomovel, String marca, String modelo, String cor, Integer anoFabricacao, Integer anoModelo, String placa, String chassi, String tipo, BigDecimal valorDiaria, BigDecimal valorHora, BigDecimal valorKm, Set<Aluguel> aluguels, Set<ManutencaoVeiculo> manutencaoVeiculos, Set<Agendamento> agendamentos) {
		this.idAutomovel = idAutomovel;
		this.marca = marca;
		this.modelo = modelo;
		this.cor = cor;
		this.anoFabricacao = anoFabricacao;
		this.anoModelo = anoModelo;
		this.placa = placa;
		this.chassi = chassi;
		this.tipo = tipo;
		this.valorDiaria = valorDiaria;
		this.valorHora = valorHora;
		this.valorKm = valorKm;
		this.aluguels = aluguels;
		this.manutencaoVeiculos = manutencaoVeiculos;
		this.agendamentos = agendamentos;
	}

	@Id
	@Column(name = "id_automovel", unique = true, nullable = false)
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	public Integer getIdAutomovel() {
		return this.idAutomovel;
	}

	public void setIdAutomovel(Integer idAutomovel) {
		this.idAutomovel = idAutomovel;
	}

	@Column(name = "marca", nullable = false, length = 50)
	@NotNull
	@Length(max = 50)
	public String getMarca() {
		return this.marca;
	}

	public void setMarca(String marca) {
		this.marca = marca;
	}

	@Column(name = "modelo", nullable = false, length = 50)
	@NotNull
	@Length(max = 50)
	public String getModelo() {
		return this.modelo;
	}

	public void setModelo(String modelo) {
		this.modelo = modelo;
	}

	@Column(name = "cor", nullable = false, length = 20)
	@NotNull
	@Length(max = 20)
	public String getCor() {
		return this.cor;
	}

	public void setCor(String cor) {
		this.cor = cor;
	}

	@Column(name = "ano_fabricacao", nullable = false)
	public Integer getAnoFabricacao() {
		return this.anoFabricacao;
	}

	public void setAnoFabricacao(Integer anoFabricacao) {
		this.anoFabricacao = anoFabricacao;
	}

	@Column(name = "ano_modelo", nullable = false)
	public Integer getAnoModelo() {
		return this.anoModelo;
	}

	public void setAnoModelo(Integer anoModelo) {
		this.anoModelo = anoModelo;
	}

	@Column(name = "placa", nullable = false, length = 7)
	@NotNull
	@Length(max = 7)
	@Pattern(regex = "[a-zA-Z]{3}[0-9]{4}", message = "Campo placa inválida")
	public String getPlaca() {
		return this.placa;
	}

	public void setPlaca(String placa) {
		this.placa = placa;
	}

	@Column(name = "chassi", nullable = false, length = 50)
	@NotNull
	@Length(max = 50)
	public String getChassi() {
		return this.chassi;
	}

	public void setChassi(String chassi) {
		this.chassi = chassi;
	}

	@Column(name = "tipo", nullable = false, length = 30)
	@NotNull
	@Length(max = 30)
	public String getTipo() {
		return this.tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}

	@Column(name = "valor_diaria", nullable = true)
	public BigDecimal getValorDiaria() {
		return this.valorDiaria;
	}

	public void setValorDiaria(BigDecimal valorDiaria) {
		this.valorDiaria = valorDiaria;
	}

	@Column(name = "valor_hora", nullable = true)
	public BigDecimal getValorHora() {
		return this.valorHora;
	}

	public void setValorHora(BigDecimal valorHora) {
		this.valorHora = valorHora;
	}

	@Column(name = "valor_km", nullable = true)
	public BigDecimal getValorKm() {
		return this.valorKm;
	}

	public void setValorKm(BigDecimal valorKm) {
		this.valorKm = valorKm;
	}

	@Column(name = "flg_ativo", nullable = false, insertable = true, updatable = true)
	public boolean isFlgAtivo() {
		return flgAtivo;
	}

	public void setFlgAtivo(boolean flgAtivo) {
		this.flgAtivo = flgAtivo;
	}

	@Column(name = "situacao", nullable = true, length = 10)
	public String getSituacao() {
		return situacao;
	}

	public void setSituacao(String situacao) {
		this.situacao = situacao;
	}

	@Column(name = "combustivel", nullable = true, length = 30)
	public String getCombustivel() {
		return combustivel;
	}

	public void setCombustivel(String combustivel) {
		this.combustivel = combustivel;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "automovel")
	public Set<Aluguel> getAluguels() {
		return this.aluguels;
	}

	public void setAluguels(Set<Aluguel> aluguels) {
		this.aluguels = aluguels;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "automovel")
	public Set<ManutencaoVeiculo> getManutencaoVeiculos() {
		return this.manutencaoVeiculos;
	}

	public void setManutencaoVeiculos(Set<ManutencaoVeiculo> manutencaoVeiculos) {
		this.manutencaoVeiculos = manutencaoVeiculos;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "automovel")
	public Set<Agendamento> getAgendamentos() {
		return this.agendamentos;
	}

	public void setAgendamentos(Set<Agendamento> agendamentos) {
		this.agendamentos = agendamentos;
	}

	@Transient
	public boolean isSelecionado() {
		return selecionado;
	}

	@Transient
	public void setSelecionado(boolean selecionado) {
		this.selecionado = selecionado;
	}

	@Column(name = "renavam", nullable = true, length = 50)
	public String getNrRenavam() {
		return nrRenavam;
	}

	public void setNrRenavam(String nrRenavam) {
		this.nrRenavam = nrRenavam;
	}

	@Column(name = "vlr_caucao", nullable = false)
	public BigDecimal getValorCaucao() {
		return valorCaucao;
	}

	public void setValorCaucao(BigDecimal valorCaucao) {
		this.valorCaucao = valorCaucao;
	}

	@SuppressWarnings("static-access")
	@Transient
	public String getValorDiariaFormatado() {
		if (this.valorDiaria != null) {
			return "R$ " + UtilString.getInstance().formatarMoeda(this.valorDiaria);
		} else {
			return UtilString.getInstance().formatarMoeda("0");
		}
	}

	@SuppressWarnings("static-access")
	@Transient
	public String getPlacaFormatada() {
		if (this.getPlaca() != null) {
			return UtilString.getInstance().formatarPlaca(this.getPlaca());
		}
		return null;
	}

}
